﻿using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
//using System.Data.OracleClient;
using Oracle.DataAccess.Client;
using Oracle.DataAccess.Types;
using WebContratos.Bean;
using System.Collections.Generic;
using WAContratos;

namespace WebContratos.Manager
{
    public class CortesManager
    {
        public List<CortesBean> obtieneDatos(string p_contratista, string l_fecha_ini, string l_fecha_fin)
        {
            OracleConnection con = Conexion.ConeEeq;
            OracleCommand Comm = new OracleCommand();
            CortesBean corB = new CortesBean();

            Comm.Connection = con;
            Comm.CommandText = "PKG_CORTES.PROC_OBTIENEREPORTE";
            Comm.CommandType = CommandType.StoredProcedure;
            Comm.Parameters.Add("p_contratista", p_contratista);//         '    VARCHAR2,
            Comm.Parameters.Add("l_fecha_ini", l_fecha_ini);//         '    VARCHAR2,
            Comm.Parameters.Add("l_fecha_fin", l_fecha_fin);//         '    VARCHAR2,
            Comm.Parameters.Add("p_datos", OracleDbType.RefCursor).Direction = ParameterDirection.Output;//    ' OUT   cur,
            Comm.Parameters.Add("p_cod", OracleDbType.Varchar2, 3).Direction = ParameterDirection.Output;
            Comm.Parameters.Add("p_msg", OracleDbType.Varchar2, 50).Direction = ParameterDirection.Output;


            OracleDataReader uReader;

            Comm.Connection = con;

            con.Open();
            uReader = Comm.ExecuteReader();

            List<CortesBean> allCortes = new List<CortesBean>();
            Double porceCortMot = 0;
            Double porceCortNeto = 0;
            Double porceRecoNeto = 0;
            Double porceRecoCorte = 0;


            while (uReader.Read())
            {
                corB = new CortesBean();
                
                corB.FechaMes = uReader.GetValue(0).ToString();
                corB.CortesGene = uReader.GetValue(1).ToString();
                corB.RecoGenera = uReader.GetValue(2).ToString();
                corB.CortesMat = uReader.GetValue(3).ToString();

                try
                {
                    porceCortMot = (Convert.ToDouble(corB.CortesMat) / Convert.ToDouble(corB.CortesGene))*100;
                }
                catch (Exception e1)
                {
                    porceCortMot = 0;
                }

                corB.CortesNeto = uReader.GetValue(4).ToString();

                corB.CortesGene = Convert.ToString(Convert.ToInt32(corB.CortesNeto) + Convert.ToInt32(corB.CortesMat));

                corB.PorceCortesMat = porceCortMot.ToString("###,##0.#0");

                try
                {
                    porceCortNeto = (Convert.ToDouble(corB.CortesNeto) / Convert.ToDouble(corB.CortesGene))*100;
                }
                catch (Exception e1)
                {
                    porceCortNeto = 0;
                }

                corB.RecoNetos = uReader.GetValue(5).ToString();
                corB.PorceCortesNetos = porceCortNeto.ToString("###,##0.#0"); 

                try
                {
                    porceRecoNeto = (Convert.ToDouble(corB.RecoNetos) / Convert.ToDouble(corB.RecoGenera))*100;
                }
                catch (Exception e1)
                {
                    porceRecoNeto = 0;
                }
                corB.PorceRecoNetos = porceRecoNeto.ToString("###,##0.#0");

                allCortes.Add(corB);


                try
                {
                    porceRecoCorte = (Convert.ToDouble(corB.RecoNetos) / Convert.ToDouble(corB.CortesNeto))*100;
                }
                catch (Exception e1)
                {
                    porceRecoNeto = 0;
                }

                corB.PorceRecoCortes = porceRecoCorte.ToString("###,##0.#0");
                
            }

            Comm.Dispose();
            con.Close();
            GC.Collect();

            return allCortes;

        }
    }
}
